#include <bits/stdc++.h>
using namespace std;
//https://www.nowcoder.com/practice/f094aed769d84cf3b799033c82fc1bf6?tpId=182&tqId=34710&ru=/exam/oj
// class Solution {
//     public:
        // string formatString(string str, vector<char>& arg) {
        //     if(str.empty())
        //     {
        //         str.append(arg.begin(),arg.end());
        //         return str;
        //     }
        //     int k=0;
        //     for(int i=0;i<str.size();i++)
        //     {
        //         if(str[i]=='%'&&str[i+1]=='s')
        //         {
        //             if(k<arg.size())
        //             {
        //                 str.erase(str.begin()+i,str.begin()+i+2);
        //                 str.insert(str.begin()+i,arg[k++]);
        //             }
        //         }
        //     }
        //     if(k!=arg.size())str.append(arg.begin()+k,arg.end());
        //     return str;
        // }
//     };

//https://www.nowcoder.com/questionTerminal/99fa7be28d5f4a9d9aa3c98a6a5b559a
// bool isPrime(int num)
// {
//     if(num<=1)return false;
//     //注意这里要为加1或者小于等于。否则会错过某些情况
//     for(int i=2;i<sqrt(num)+1;i++)
//     {
//         if(num%i==0)return false;
//     }
//     return true;
// }
// bool isMagicnum(int num)
// {
//     vector<int> digit;
//     while(num)
//     {
//         digit.push_back(num%10);
//         num/=10;
//     }
//     for(int i=0;i<digit.size();i++)
//     {
//         for(int j=0;j<digit.size();j++)
//         {
//             //下标不同才是不同的数，有可能不同下标的值是相同的
//             if(i!=j&&digit[i]!=0)
//             {
//                 int number=digit[i]*10+digit[j];
//                 if(isPrime(number))return true;
//             }
//         }
//     }
//     return false;
// }
// int main()
// {
//     int a,b;
//     cin>>a>>b;
//     int count=0;
//     for(int i=a;i<=b;i++)if(isMagicnum(i))count++;
//     cout<<count<<endl;
//     return 0;
// }


//https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a?tpId=37&tqId=21286&ru=/exam/oj
//滑动窗口
// int main() {
//     string s;cin >> s;
//     int n;cin >> n;
//     int count = 0;
//     double rate = -1.0;
//     string retstring;
//     for (int left = 0, right = 0; right < s.size();) {
//         //防止right超出字符串长度
//         while (right - left < n && right<s.size()) {
//             if (s[right] == 'G' || s[right] == 'C')count++;
//             right++;
//         }
//         //当字串长度满足n时在更新retstring和rate
//         if (right - left == n) {
//             double curr_rate = static_cast<double>(count) / n;
//             if (curr_rate > rate) {
//                 rate = curr_rate;
//                 //第二个参数是长度
//                 retstring = s.substr(left, n);
//             }
//         }

//         if (s[left] == 'G' || s[left] == 'C')count--;
//         ++left;
//     }
//     cout << retstring << endl;
//     return 0;
// }
//第二种写法，先处理第一部分,逻辑简单但是细节多
int main()
{
    string s;cin>>s;
    int n;cin>>n;
    int count=0;
    double rate=-1.0;
    string retstring;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='G'||s[i]=='C')count++;
    }
    
    double curr_rate=static_cast<double>(count)/n;
    rate =curr_rate;
    retstring=s.substr(0,n);
    //防止越界，设置为s.size()-n
    for(int i=1;i<=s.size()-n;i++)
    {
        //移除左端点
        if(s[i-1]=='G'||s[i-1]=='C')count--;

        //移动右端点，构成字串
        if(s[i+n-1]=='G'||s[i+n-1]=='C')count++;
        
        curr_rate=static_cast<double>(count)/n;
        if(curr_rate>rate)
        {
            rate=curr_rate;
            retstring=s.substr(i,n);
        }
    }
    cout<<retstring<<endl;
    return 0;
}